// 对axios进行封装
import axios from 'axios'
//import store from '@/store'
import { Toast } from 'antd-mobile'
import { customHistory } from './history'
// 基本语法
const http = axios.create({
  // 初始信息
  timeout: 50000, // 5秒之后超时
})
// 请求拦截器
http.interceptors.request.use(
  (config) => {
    // 需要返回类型- 统一注入token
    // 获取token 注入到请求头中
    // let {
    //   login: { token },
    // } = store.getState() // 拿到token
    // 注入token
    // if ( config.headers)
    // 判断是否是登录接口
    // if (!config.url?.startsWith('/authorizations')) {
    //   // 非登录情况下
    //   config.headers!['Authorization'] = `Bearer ${token}` // 非空断言 主观认为header一定不额为空
    // }
    // 三种方式解决 为空报错的问题  ? ! if
    config.headers = { 'pc-token': '4a82b23dbbf3b23fd8aa291076e660ec', 'content-Type': 'application/x-www-form-urlencoded' }
    return config
  },
  (error) => Promise.reject(error)
)

// 响应拦截器
http.interceptors.response.use(
  (response) => {
    // axios默认多加了一层data  这里直接解构 返回data
    return response.data ? response.data : {}
  },
  (error) => {
    // 这里需要处理异常 出现问题 后台报错 提示报错信息
    // response  401 400 402 502
    if (error.response?.status === 401) {
      // 401状态表示 token失效 或者登录失败 或者token不存在
      // antd提示
      Toast.show({
        content: '登录超时,请重新登录',
        duration: 1000,
        afterClose: () => {
          // toast关闭时会执行一个回调函数
          // 简单粗暴地先跳转到登录页
          customHistory.push('/login') // 简单的跳到登录页
        },
      })
    }

    return Promise.reject(error)
  }
)

export { http }
